package com.youlu.campus.web.community.controller;

import com.youlu.campus.base.base.PageQueryRequest;
import com.youlu.campus.web.community.dto.*;
import com.youlu.campus.web.community.service.InteractiveService;
import com.yuelin.infrastructure.quantum.common.QResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 动态互动相关API
 * 评论、点赞、分享
 * @author: YangJ
 * @date: 2020/11/26 20:29
 */
@RestController
public class InteractiveController {

    @Autowired
    private InteractiveService interactiveService;

    /**
     * 发表评论（一级）
     * 备注：发表一级评论
     * 参数：request - 发表评论请求类
     */
    @PostMapping("/mini-app/content/comment/first")
    public QResult firstComment(@RequestBody CommentFirstRequest request){
        return QResult.success(interactiveService.firstComment(request));
    }

    /**
     * 发表评论（二级）
     * 备注：发表二级评论
     * 参数：request - 发表评论请求类
     */
    @PostMapping("/mini-app/content/comment/second")
    public QResult secondComment(@RequestBody CommentSecondRequest request){
        return QResult.success(interactiveService.secondComment(request));
    }

    /**
     * 评论列表
     * 备注：动态下的评论列表
     * 参数：request - 评论信息查询请求类
     * 返回：200-请求成功，返回CommentResponse类型结果
     */
    @PostMapping("/mini-app/content/comment/list")
    public QResult commentList(@RequestBody CommentQueryRequest request){
        return QResult.success(interactiveService.commentList(request));
    }

    /**
     * 点赞
     * 备注：动态/评论/文章/商品点赞功能通用API
     * 参数：request - 点赞请求类
     */
    @PostMapping("/mini-app/content/like")
    public QResult like(@RequestBody ContentLikeRequest request){
        return QResult.success(interactiveService.like(request));
    }

    /**
     * 取消点赞
     * 备注：动态/评论/文章/商品取消点赞功能通用API
     * 参数：request - 点赞请求类
     */
    @PostMapping("/mini-app/content/unlike")
    public QResult unlike(@RequestBody ContentLikeRequest request){
        return QResult.success(interactiveService.unlike(request));
    }

    /**
     * 内容分享
     * 备注：动态/评论/文章/商品分享功能通用API
     * 参数：request - 内容分享请求类
     */
    @PostMapping("/mini-app/content/share")
    public QResult share(@RequestBody ContentShareRequest request){
        return QResult.success(interactiveService.share(request));
    }

    /**
     * 内容收藏
     * 备注：文章-收藏文章
     * 参数：request - 收藏信息请求类
     */
    @PostMapping("/mini-app/content/collect")
    public QResult collect(@RequestBody UserCollectRequest request){
        return QResult.success(interactiveService.collect(request));
    }

    /**
     * 取消收藏
     * 备注：文章/我的收藏列表-取消收藏
     * 参数：infoId - 信息ID
     */
    @DeleteMapping("/mini-app/collect/delete")
    public QResult unCollect(String infoId){
        return QResult.success(interactiveService.unCollect(infoId));
    }

    /**
     * 我的收藏
     * 备注：我的-我的收藏列表
     * 参数：request - 收藏信息查询请求类
     */
    @PostMapping("/mini-app/user/collect/list")
    public QResult collectList(@RequestBody PageQueryRequest request){
        return QResult.success(interactiveService.collectList(request));
    }

    /**
     * 关注用户
     * 备注：用户主页关注
     * 参数：request - 关注用户请求类
     */
    @PostMapping("/mini-app/follow/user")
    public QResult followUser(@RequestBody FollowUserRequest request){
        return QResult.success(interactiveService.followUser(request));
    }

    /**
     * 取消关注用户
     * 备注：用户主页取消关注
     * 参数：userId - 用户ID
     */
    @DeleteMapping("/mini-app/follow/delete")
    public QResult unFollowUser(String userId){
        return QResult.success(interactiveService.unFollowUser(userId));
    }

    /**
     * 关注/粉丝列表
     * 备注：用户主页关注/粉丝列表
     * 参数：request - 关注信息查询请求类
     * 返回：200-请求成功，返回FollowResponse类型结果
     */
    @PostMapping("/mini-app/follow/list")
    public QResult followList(@RequestBody FollowQueryRequest request){
        return QResult.success(interactiveService.followList(request));
    }

    /**
     * 获取用户互动数据
     * 备注：个人主页-关注、粉丝、获赞、分享数
     * 参数：userId - 用户ID（不传，默认为当前用户)
     * 返回：200-请求成功，返回CommContentResponse类型结果
     */
    @GetMapping("/mini-app/interactive/user")
    public QResult userInteractive(String userId){
        return QResult.success(interactiveService.userInteractive(userId));
    }

    /**
     * 我的互动消息未读数
     * 备注：我的-我的互动 点赞、评论通知未读数
     * 返回：200-请求成功，返回MsgReadResponse类型结果
     */
    @GetMapping("/mini-app/user/msg/count")
    public QResult userUnRead(){
        return QResult.success(interactiveService.userUnRead());
    }

    /**
     * 我的点赞通知列表
     * 备注：我的-我的互动 点赞列表
     * 参数：request - 信息查询请求类
     * 返回：200-请求成功，返回MsgResponse类型结果
     */
    @PostMapping("/mini-app/user/like/list")
    public QResult userLikeList(@RequestBody PageQueryRequest request){
        return QResult.success(interactiveService.userLikeList(request));
    }

    /**
     * 我的评论通知列表
     * 备注：我的-我的互动 评论列表
     * 参数：request - 信息查询请求类
     * 返回：200-请求成功，返回MsgResponse类型结果
     */
    @PostMapping("/mini-app/user/comment/list")
    public QResult userCommentList(@RequestBody PageQueryRequest request){
        return QResult.success(interactiveService.userCommentList(request));
    }

    /**
     * 获取用户统计数据
     * 备注：我的-关注、粉丝、收藏、证书数
     * 返回：200-请求成功，返回UserStatResponse类型结果
     */
    @GetMapping("/mini-app/statistics/user")
    public QResult userStatistics(){
        return QResult.success(interactiveService.userStatistics());
    }

    /**
     * 调试mq
     */
    @GetMapping("/public/temp/test/mq")
    public QResult testMq(){
        return QResult.success(interactiveService.testMq());
    }
}